/**
 * @param {number[]} nums
 * @return {number}
 */
var rob = function(nums) {
    let len = nums.length, flag = true;
       if(len === 0) return 0 // 长度为0，直接返回
       if(len == 1 || len == 2) return Math.max(...nums) // 长度为1或2取最大值
       let oneMax = nums[0], twoMax = nums[1];
       if(nums[1] > nums[0]) {
           twoMax = nums[1]
           flag = false;
       }
       if(oneMax + nums[2] > twoMax) {
           flag = true;
       }
       const foo = (nums) => {
           let maxPtr = 0, one = nums[0], two = nums[0];
           if(nums[1] > nums[0]) {
               two = nums[1]
               maxPtr = 1; // 更新当前区间取最大值的索引
           }
           for(let i = 2; i < nums.length; i++) {
               let temp;
               if(maxPtr === i - 1) { // 取最大值位置相邻
                   if(one + nums[i] > two) { // 判断前面的前面的位置
                       temp = one
                       one = two
                       two = temp + nums[i]
                       maxPtr = i; // 更新取最大值指针的索引
                   }
               } else { // 取最大值位置不相邻直接更新
                   one = two
                   two = two + nums[i];
                   maxPtr = i
               }
           }
           return two
       }
       if(!flag) return foo(nums)
       else {
           let a = foo(nums.slice(1))
           let b = foo(nums.slice(0, len - 1))
           return Math.max(a, b)
       }
   };